#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-10-23 22:55
# @Author : youngchaolin

'''
json：javascript object notation:java脚本对象比较语言
'''


'''
序列化：将内存中的数据转换成字节串，保存到文件或者通过网络传输，称为序列化过程
反序列化：从文件或网络中获取数据，转换成内存中原有的数据类型，称为反序列化过程

json和pickle模块是实现序列化和反序列用的

json：将数据转换成字符串（注意不是字节串），用于存储和网络传输
'''

import json

# 序列化
# 将指定对象序列化成json字符串
res=json.dumps([1,2,3])
print(res,type(res))

res=json.dumps((1,2,3)) # 元组序列化后，变成了列表
print(res,type(res)) # [1, 2, 3]


res=json.dumps(10)
print(res,type(res)) # 10 <class 'str'>

# 字典
res=json.dumps({'name':'messi','age':33})
print(res,type(res))

# 序列化到文件中
with open('f.txt',mode='wt',encoding='utf-8') as f:
    json.dump([1,2,3],f)
    print('序列化到文件f.txt成功')

# 反序列化
res=json.dumps([1,2,3])
lst=json.loads(res)
print(lst,type(lst))

# 元组的反序列化，最后变成列表
res=json.dumps((1,2,3))
lst=json.loads(res)
print(lst,type(lst))

# 从文件中反序列化
with open('a.txt',encoding='utf-8') as f:
    res=json.load(f)
    print(res,type(res))

'''
json方法总结：
json.dumps(obj)：将obj对象序列化到内存中
json.dump(obj,f)：将obj对象序列化到文件f中
json.loads(s)：将字符串s反序列化为对象
json.load(f)：将文件f中的字符串反序列化为对象
'''

# json文件通常一次性写，一次性读

# json可以把需要序列化的对象，通过多次序列化的方法，配合文件句柄的write方法，把多次序列化后的
# 字符串写到文件中

# with open('json.txt',mode='at',encoding='utf-8') as f:
#     f.write(json.dumps([1,2,3])+'\n')
#     f.write(json.dumps([4,5,6])+'\n')


# 把分次序列化的字符串，在反序列化到实际对象
print('----反序列化回来----')
with open('json.txt',mode='rt',encoding='utf-8') as f:
    # for循环
    # for line in f:
    #     res=json.loads(line.strip())
    #     print(res,type(res))
    # 读两次
    res1=json.loads(f.readline().strip())
    print(res1,type(res1))
    res2=json.loads(f.readline().strip())
    print(res2,type(res2))







